package com.cskaoyan.javase.oop1._7game._2pvz;

/**
 * 用面向对象的思想模拟植物大战僵尸
 * 很明显,需要两个对象,僵尸(Zombie)对象和植物(Plant)对象
 * 需要两个类:
 *      植物类
 *      僵尸类
 *
 * 以上案例中,为了方便僵尸对象和植物对象的交互,需要它们互相持有引用
 * 这种情况,在实际开发中是很少见的
 * 但是某个对象完成功能,需要另外一个对象的支持,需要持有另外一个对象的引用作为成员变量
 * 这是非常常见的
 *
 * 扩展:
 *      实际开发中,对象不可能是自己手动new创建的
 *      都是依赖于框架(主要就是Spring)帮助我们创建
 *      依赖于框架帮助我们完成管理对象
 *
 * @since 10:58
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        Zombie z = new Zombie("铁桶僵尸", 1000, 200, 100);
        Plant p = new Plant("豌豆射手", 25, 500, 300);
        // 互相持有引用赋值
        z.zombieP = p;
        p.plantZ = z;
        System.out.println("Game Start!");
        System.out.println("僵尸来了!");
        z.move();
        p.attack();
        z.beAttacked();
        System.out.println("僵尸接近了植物,开始攻击植物!");
        z.attack();
        p.beAttacked();
        System.out.println("僵尸取得了胜利!");
        z.eat();
        System.out.println("Game Over!");

    }
}
